package org.yelongframework.json.gson.bind;

import java.lang.reflect.Type;
import java.util.Objects;

import org.yelongframework.json.JsonException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * 默认GsonJson工具实现
 * 
 * @since 1.0.0
 */
public class DefaultGsonJsonBeanBinder implements GsonJsonBeanBinder {

	/** Gson */
	private final Gson gson;

	// ==================================================构造器==================================================

	/**
	 * @param gson Gson
	 */
	public DefaultGsonJsonBeanBinder(Gson gson) {
		this.gson = Objects.requireNonNull(gson, "gson");
	}

	/**
	 * @param gsonBuilder Gson构建器
	 */
	public DefaultGsonJsonBeanBinder(GsonBuilder gsonBuilder) {
		this(Objects.requireNonNull(gsonBuilder, "gsonBuilder").create());
	}

	// ==================================================对象转JSON==================================================

	@Override
	public String toJson(Object src) throws JsonException {
		return gson.toJson(src);
	}

	@Override
	public String toJson(Object src, Type typeOfSrc) throws JsonException {
		return gson.toJson(src, typeOfSrc);
	}

	// ==================================================JSON转对象==================================================

	@Override
	public <T> T fromJson(String json, Class<T> classOfT) throws JsonException {
		return gson.fromJson(json, classOfT);
	}

	@Override
	public <T> T fromJson(String json, Type typeOfT) throws JsonException {
		return gson.fromJson(json, typeOfT);
	}

	// ==================================================Gson==================================================

	@Override
	public Gson getGson() {
		return gson;
	}

	// ==================================================Gson构建器==================================================

	@Override
	public GsonBuilder getGsonBuilder() {
		return gson.newBuilder();
	}

}
